/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package rmiclient;

import java.awt.BorderLayout;
import java.awt.FontMetrics;
import java.util.ArrayList;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.ListSelectionModel;
import javax.swing.border.EmptyBorder;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.DefaultTableModel;
import rmiserver.Ticket;

/**
 * Таблица для отображения информации о билетах
 * @author alexxxey
 */
public class TicketsPanel extends JPanel
{
    public TicketsPanel()
    {
        m_ticketList = new ArrayList<>();  
        
        setBorder(new EmptyBorder(2, 2, 2, 2));  
        setLayout(new BorderLayout(0, 0)); 
        
        m_model = new DefaultTableModel(){  
            @Override  
            public boolean isCellEditable(int row, int column){  
                return false;  
            };
        };
        
        m_model.addColumn("Маршрут");        
        m_model.addColumn("Место");
        m_model.addColumn("Паспорт");
        m_model.addColumn("Имя");
        m_model.addColumn("Фамилия");
        
        m_table = new JTable(m_model);                   
        m_table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
        
        m_fm = m_table.getFontMetrics(m_table.getFont());
        m_table.setRowHeight(2*m_fm.getHeight());
        
        for (int i=0; i<m_table.getColumnCount(); ++i)
        {
            if (i < m_table.getColumnCount()-2)
            {  
                m_table.getColumnModel().getColumn(i).setMaxWidth(COLUIMN_WIDTH[i]);                                                           
            }   
                        
            DefaultTableCellRenderer cr = new DefaultTableCellRenderer();
            cr.setHorizontalAlignment(JTextField.CENTER);
            m_table.getColumnModel().getColumn(i).setCellRenderer(cr);            
        }
        
        JScrollPane scrollPane = new JScrollPane(m_table);  
        add(scrollPane, BorderLayout.CENTER);
    }
    
    /**
     * Добавление билетов
     * @param tickets Список билетов
     */
    public void addTicketList(ArrayList<Ticket> tickets)
    {   
        if (!tickets.isEmpty())  
        {
            int rowCnt = m_model.getRowCount();
            for (int i=rowCnt-1; i>=0; --i)
            {
                m_model.removeRow(i);
            }

            m_ticketList.clear();                        
            m_ticketList = new ArrayList<>(tickets);

            for (Ticket t : m_ticketList)
            {
                addTicket(t);
            }

            m_table.setRowSelectionInterval(0, 0);
        }
        else
        {
            int rowCnt = m_model.getRowCount();
            for (int i=rowCnt-1; i>=0; --i)
            {
                m_model.removeRow(i);
            }
        }
    }
    
    /**
     * Получение объекта с информацией о билете, связанного
     * со строкой в таблице
     * @return Выбраный маршрут
     */
    public Ticket getSelectionTicket()
    {
        int rowIdx = m_table.getSelectedRow();        
        return (rowIdx==-1 ? null : m_ticketList.get(rowIdx));
    }
    
    /**
     * Добавление одного билета в таблицу
     * @param t билет
     */
    private void addTicket(Ticket t)
    {                
        String[] rowData = 
        {
            new Integer(t.getTripId()).toString(), 
            new Integer(t.getPlace()).toString(), 
            new Integer(t.getManId()).toString(),
            t.getFirstName(),
            t.getLastName()
        };                 
                        
        m_model.addRow(rowData);           
    }
    
    private ArrayList<Ticket> m_ticketList;
    
    private JTable m_table;  
    private DefaultTableModel m_model;
    
    private FontMetrics m_fm;    
    private final static int[] COLUIMN_WIDTH = {80, 60, 100};
}
